\chapter{总结与展望}
\section{总结}
至本文完成，作者在互联网行还未发现一个可用的Android数据恢复解决方案。本文针对Android智能手机
上的数据恢复的需求，介绍了一个针对NAND镜像和Android常用文件系统YAFFS2的恢复工具\yaffsrecover 的设计与实现，具体包括如下方面：
\begin{itemize}
\item NAND模拟层的设计与实现：\\
该模块主要负责读取镜像文件，并模拟一个MTD设备，向上层模块开放读写接口，使得NAND镜像的读写操作
对上层其它模块透明。在实现上，采取了同Linux MTD设备相同的结构体进行描述，重新实现了读、写、
初始化函数。
\item Chunk解析器的设计与实现：\\
该模块负责解析YAFFS2节的元信息以及头节中包含的文件元信息。在实现上重写了YAFFS2的chunk读取函数，
使它们不再依赖YAFFS2运行时，同时重用了YAFFS2的大量结构定义。
\item 文件chunk组织索引的设计与实现：\\
该模块是\yaffsrecover 功能的基础。它负责将节按照所属的对象进行组织，同时想上次提供快速按
objectID查找、查找对象的父对象的接口。在实现上，它使用了红黑树来组织每个对象；用双向链表链接
每个对象的节。
\item 文件恢复算法的设计与实现：\\
该模块对属于同一对象并按照写入时间排序的节进行扫描，依照扫描到的头节来恢复该对象的某个修改版本。
本文设计、分析并实现了这一算法。
\item 人机界面的设计与实现：\\
\yaffsrecover 主程序提供参数式和交互式命令行两种用户界面。命令行适用于快速或批量的恢复操作；
交互式适用于与图形前端程序进行交互和详细的文件信息查看。
\end{itemize} 
\section{进一步工作}
\yaffsrecover 不仅是一个文件恢复工具，也是一个YAFFS2文件系统分析工具。利用chunk的信息，我们
可以考虑如下后续工作：
\begin{itemize}
\item YAFFS2文件系统去重(deduplication)：文件系统中有一些chunk是完全相同的。
去重工作就是将这些chunk合并到一起，并且实现写时复制。这项工作的研究点在于如何选择合并的chunk，
使文件系统达到性能和容量的平衡。
\item 云端YAFFS2备份系统：为用户的Android设备创建一个云端的备份，在本地文件系统更改（或手动备份)时
，云端的备份文件系统也一并更改。这项工作可以建立在上一个工作的基础上以节约云端的存储空间。研究点
在于如何高效地（包括节约流量、能源和时间）将文件更改信息透过网络发送到云端。
\item 敏感数据保护：了解YAFFS2的垃圾回收原理后，我们可以通过修改垃圾回收策略来对用户不想让其被
恢复的数据进行保护，即让这些数据的chunk尽快被清零。这项工作的研究点在于智能寻找敏感数据以及设计
新的垃圾回收策略。
\end{itemize}
